#include "key.h"

void KEY_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

    // 使能GPIOF
    RCC_APB2PeriphClockCmd(KEYX_RCC_CLK, ENABLE);

    // 配置GPIOF引脚4和引脚3为输入上拉模式
    GPIO_InitStructure.GPIO_Pin = KEY0_PIN | KEY1_PIN;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 输入上拉模式
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(KEYX_PORT, &GPIO_InitStructure); // 初始化GPIOF
}

/*
按键处理函数
mode: 不支持连续按下:mode=0;支持连续按下:mode=1;
返回按键值
0,没有任何键按下
1,KEY0按下
2,KEY1按下
*/
int isKeyPressed(uint8_t mode)
{
    static uint8_t key_up = 1; // 按键松开标志
    if (mode)
    {
        key_up = 1; // 支持连续按下
    }
    if (key_up && (KEY0_STATIC || KEY1_STATIC))
    {
        delay_ms(10); // 消抖
        key_up = 0;
        if (KEY0_STATIC == Bit_RESET)
        {
            return KEY0_PRESSED; // 按键0按下
        }
        if (KEY1_STATIC == Bit_RESET)
        {
            return KEY1_PRESSED; // 按键1按下
        }
    }
    else if (KEY0_STATIC == Bit_SET || KEY1_STATIC == Bit_SET)
    {
        key_up = 1; // 无按键按下
    }

    return 0;
}
